/*
  get数据说明文档
  1、筛选发布数据 通过(all=?)可以获取全部数据（包括待发布数据）（用于后台显示数据）
  2、数组字符串转数组
  3、筛选分类(type=?)
  4、数据分页（pagenum:当前页码，pagesize:每页条数）(pagenum=?,pagesize=?)(返回数据类型 {list:[],sum:?})
  5、指定ID访问单条数据(id=?)
  6、指定ID的多条相连数据(id=?,linksize=?)
  7、指定分类(type=?)
  8、搜索关键字(keyword=?)
  9、限制条数(size=?)
  10、数据排序
*/
/* 搜索关键字(keyword=?) */
function keywordSearch(data,req){
  if(req.query.keyword){    
    return data.filter((item)=>{
      return JSON.stringify(item).includes(req.query.keyword)
    })
  }
  return data
}

/* 指定分类(type=?) */
function classData(data,req){
  if(req.query.type && data[0] && data[0].child){
    data.filter((item)=>{
      return item.child.includes(req.query.type)
    })
  }
  return data
}

/* 限制条数,默认最多30条(size=?) */
function dataSize(data,req){
  if(req.query.size){
    return data.slice(0,req.query.size)
  }
  return data
}

/* 筛选发布数据 通过(all=?)可以获取全部数据（包括待发布数据）（用于后台显示数据） */
function filterIssue(data,req){
  if(data[0] && data[0].issue && req.query.all != 1){ 
    return data.filter(function(item){  //前台只显示发布数据
      return parseInt(item.issue) === 1;
    })
  }
  return data
}
/* 数组字符串转数组 */
function stringToArray(data){
  //所有数组字符串(原因：MYSQL以字符串形式存放数组)
  const arrayValue = ['child','child2','child3','images','images2','images3'];
  data.forEach(function(item){ 
    for(let key in item){
      if(arrayValue.includes(key) && item[key]){          
        item[key] = item[key].split(",")
      }
    }  
  })
  return data
}
//筛选分类(type=?)
function filterType(data,req){
  if(req.query.type){
    const type = req.query.type
    return data.filter((item)=>{
      return type.includes('全部') || item.child && item.child.includes(type)
    })
  } 
  return data
}
//数据分页（pagenum:当前页码，pagesize:每页条数）(pagenum=?,pagesize=?)(返回数据类型 {list:[],sum:?})
function pagaData(data,req){
  if(req.query.pagenum && req.query.pagesize){
    const pagenum = parseInt(req.query.pagenum)
    const pagesize = parseInt(req.query.pagesize)
    let pageData = {
      list:[],//指定页码分页数据
      sum:0 //数据总条数
    }         
    pageData.list = data.slice(pagenum*pagesize,(pagenum+1)*pagesize)
    pageData.sum = data.length    
    return pageData
  } 
  return data
}
//指定ID访问单条数据(id=?)
function idData(data,req){
  if(req.query.id){  
    return data.find((item)=>{
      return parseInt(item.id) === parseInt(req.query.id)
    })
  }
  return data
}
//指定ID的多条相连数据(id=?,linksize=?)
function idLinkData(data,apiTableData,req){  
  if(req.query && req.query.id && req.query.linksize){ //指定ID，返回多条相连数据
    const size = req.query.linksize    
    const index = apiTableData.findIndex((item)=>{
      return Number(item.id) === Number(req.query.id)
    })
    //深拷贝数据，不影响外部数据
    let newData = JSON.parse(JSON.stringify(apiTableData))
    newData.splice(index,1)
    let start = index - Math.ceil(size/2)
    if(start < 0 || newData.length < size){
      //如果起始索引小于0或数据数量小于请求数量，则起始索引为0
      start = 0
    }else if(start+size > newData.length){
      //如果起始索引加请求数量超过数据数量，则从后往前算起始索引
      start = newData.length - size    
      //起始索引依然不能小于0
      if(start < 0){
        start = 0
      }
    }
    return {...data,list:newData.slice(start,start+size)}
  }
  return data
}
// 排序数据
function sortData(data){
  if(!Array.isArray(JSON.parse(JSON.stringify(data)))){return data}
  return JSON.parse(JSON.stringify(data)).sort((a, b) => {
      a = new Date(a.date).getTime()
      b = new Date(b.date).getTime()
      return b - a
    }).sort((a, b) => {
      return b.sort - a.sort
    }).sort((a, b) => { //勾选TOP优先级最高
      return b.top - a.top
    })
}

module.exports = {
  filterIssue,
  stringToArray,
  filterType,
  pagaData,
  idData,
  idLinkData,
  dataSize,
  classData,
  keywordSearch,
  sortData
}